- Published on
UE 中的旋转:FRotator 和 FQuat
- Authors
- Name
- Zihan Li
FRotator 和 FQuat 是 Unreal Engine 中用于表示旋转的两种不同的数据结构,它们各自有不同的特性和用法。
FRotator
定义与结构
FRotator 是一种使用欧拉角表示旋转的结构,包含三个分量:
- Pitch(俯仰角):绕 Y 轴旋转。
- Yaw(偏航角):绕 Z 轴旋转。
- Roll(滚转角):绕 X 轴旋转。
FRotator 的构造函数示例:
FRotator rotator(0, 10, 0); // 绕 Z 轴旋转 10 度
这种方式直观易懂,但在某些情况下可能会导致万向节锁(gimbal lock)问题,即在某些旋转组合下,失去一个自由度。
转换与应用
FRotator 可以轻松地与其他类型的旋转表示进行转换,例如转换为四元数:
FQuat MyQuat = MyRotator.Quaternion();
FQuat
定义与结构
FQuat 是基于四元数的旋转表示,四元数是一种更复杂的数学结构,通常由一个单位向量和一个旋转角度组成。它不使用度数,而是通过四个分量(x, y, z, w)来表示旋转。
四元数的构造示例:
FQuat quat = FQuat(FVector(0, 0, 1), PI / 4.f); // 绕 Z 轴旋转 45 度
FQuat 的优点在于它不会受到万向节锁的影响,并且在插值和平滑旋转时表现更好。
转换与应用
FQuat 可以通过欧拉角创建:
FVector vec = FVector(0, 0, 45);
FQuat quat = FQuat::MakeFromEuler(vec);
同样,FQuat 可以转换回 FRotator:
FRotator MyRotator(MyQuat); // 使用 FRotator 的构造函数
总结
- FRotator 使用欧拉角(Pitch, Yaw, Roll)表示,适合简单的旋转需求,但可能会遇到万向节锁问题。
- FQuat 使用四元数表示,适合复杂和连续的旋转操作,避免了万向节锁,并提供更平滑的插值效果。
在实际开发中,选择使用哪种结构通常取决于具体的应用场景和需求。
Citations: [1] https://juejin.cn/post/7076751832298553358 [2] https://juejin.cn/post/7075379926345449479 [3] https://forums.unrealengine.com/t/unreal-whats-the-difference-between-frotator-and-fquat/382191 [4] https://www.bilibili.com/read/cv5561929/ [5] https://blog.csdn.net/baidu_28938713/article/details/78550726 [6] https://blog.csdn.net/invgihfsvf/article/details/118335670 [7] https://blog.csdn.net/ChaoChao66666/article/details/127245214 [8] https://www.bilibili.com/read/cv5578526/ [9] https://blog.csdn.net/mrbaolong/article/details/112547972 [10] https://www.cnblogs.com/sevenyuan/p/11848576.html